#ifndef GY_SIGNALGENERATOR_H
#define GY_SIGNALGENERATOR_H

#include "GY_BasicsCalculators.h"
#include <QTimer>

class GY_CONTROLLIBRARY_EXPORT GY_SignalGenerator : public GY_BasicsCalculators
{
    Q_OBJECT

public:
    explicit Q_INVOKABLE GY_SignalGenerator(const QString &guid,QGraphicsItem *parent = nullptr);
    ~GY_SignalGenerator();

private:
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();
    /**
     * @brief updateOutputSignal 更新输出信号
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateOutputSignal(const QString &name, const QVariant &value);
    /**
     * @brief updateValue1 更新属性值1
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateValue1(const QString &name, const QVariant &value);
    /**
     * @brief updateValue2 更新属性值2
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateValue2(const QString &name, const QVariant &value);
    /**
     * @brief updateFrequency_Hz 更新?----
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateFrequency_Hz(const QString &name, const QVariant &value);
    /**
     * @brief updateDutyCycle_Percent 更新?----
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateDutyCycle_Percent(const QString &name, const QVariant &value);
    /**
     * @brief updateStartingPhase_Percent 更新?----
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateStartingPhase_Percent(const QString &name, const QVariant &value);
    /**
     * @brief updateUpdateRate_Hz 更新?----
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateUpdateRate_Hz(const QString &name, const QVariant &value);
    /**
     * @brief updateDurationLimit_mSecs 更新?----
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateDurationLimit_mSecs(const QString &name, const QVariant &value);
    /**
     * @brief updateSignalType 更新?----
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateSignalType(const QString &name, const QVariant &value);
    /**
     * @brief updateEnabled 更新?----
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateEnabled(const QString &name, const QVariant &value);
    /**
     * @brief updateEnsureEveryPeriodExecutes 更新?----
     * @param name 属性名称
     * @param value 属性值
     * @return 返回更新是否成功
     */
    bool updateEnsureEveryPeriodExecutes(const QString &name, const QVariant &value);

public:
    /**
     * @brief evOutputSignal 信号事件
     * @return
     */
    double evOutputSignal();
    /**
     * @brief evCompleted
     */
    void evCompleted();

public:
    /**
     * @brief doStart 开始计时
     */
    void doStart();
    /**
     * @brief doStop 计时暂停
     */
    void doStop();
    /**
     * @brief doReset 计时重置
     */
    void doReset();

private:
    //定时器
    QTimer *m_pTimer;
    //峰值默认value1--假
    bool peakValue = false;

};

#endif // GY_SIGNALGENERATOR_H
